iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0
Modern Web

職缺資訊平台—Jobscanner系列 第 7

[前置作業] 建立 Cloud Functions

  • 分享至 

  • xImage
  •  

2022年2月 Cloud Functions 第二代釋出,提供更長的執行時間、更大的執行資源...等。
https://ithelp.ithome.com.tw/upload/images/20230920/20128122rPSGqxzmU5.png
圖取自 Cloud Functions version comparison

Cloud Functions 觸發條件

分為 HTTP triggersEvent triggers

  • HTTP triggers: 回應 HTTP(S) 請求
    • 支援 GETPOSTPUTDELETE 以及 OPTIONS
  • Event triggers: 回應 Google Cloud 中的事件

一個 Function 只能設定一個觸發條件,可以部署多個 Function 被同一個事件所觸發。


部署 Cloud Functions

部署有兩種方式:

  1. 透過 Google Cloud console
  2. 使用 Google Cloud CLI

Google Cloud console

*以下內容取自:Create a 2nd gen Cloud Function by using the Google Cloud console

  1. 進入 Google Cloud 控制台,左側選單選擇「無伺服器 - Cloud Functions」
  2. 點擊「建立函式
  3. 基本設定:環境使用第2代、填入函式名稱、選擇地區 (asia-east1)
  4. 觸發條件:可先使用「允許未經驗證的叫用」 (方便測試)
  5. 執行階段、建構作業、連線和安全性設定皆使用預設值
  6. 點擊「下一步
  7. 函式預設內容如下:
// 使用 @google-cloud/functions-framework 函式庫來建立 Cloud Functions
const functions = require('@google-cloud/functions-framework');

// 指定函式類型以及函式名稱
functions.http('helloHttp', (req, res) => {
 res.send(`Hello ${req.query.name || req.body.name || 'World'}!`);
});

// 函式有三種類型 (對應到觸發條件)
// HTTP-triggered functions
// Background functions
// CloudEvent functions
  1. 可使用右側的提供的"預先部署測試"進行測試
  2. 確定後,點擊「部署
  3. 得到一個觸發 Function 的網址,例如:https://xxxxxxxxxx.cloudfunctions.net/function-ithome-demo
    傳入不同的 querystring,會顯示不同的 Response,例如:https://xxxxxxxxxx.cloudfunctions.net/function-ithome-demo?name=xxx

Google Cloud CLI

*以下內容取自:Create a 2nd gen Cloud Function by using the Google Cloud CLI

gcloud CLI 包含 gcloudgsutilbq,可用來取得 Compute Engine、Cloud Storage、 BigQuery 等其他產品服務的 command line 工具。

  1. 安裝 gcloud CLI
  2. 進行初始化 gcloud init
  3. 下載 Google Cloud 的範例
    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
  4. 切換到 Cloud Functions HTTP Request 目錄
    cd nodejs-docs-samples/functions/helloworld/helloworldGet/
  5. 部署 HTTP trigger 的函式
gcloud functions deploy nodejs-http-function \
--gen2 \
--runtime=nodejs20 \
--region=asia-east1 \
--source=. \
--entry-point=helloGET \
--trigger-http \
--allow-unauthenticated

相關參數可參考gcloud functions deploy 官方文件

其他常用指令:

  • 查看相關設定:gcloud config list
  • 更改地區:gcloud config set functions/region asia-east1
  • 刪除函式 gcloud functions delete nodejs-http-function --gen2 --region asia-east1

補充

Google Cloud 提供很多 Cloud Functions 基本範例,可依照使用的程式語言做篩選。

例如:利用全域變數計算 Functions 呼叫次數,範例來源:Statelessness

全域變數,可在之後的呼叫使用。所有的 Functions 可以使用共用的變數。
建立 count 變數,用來計算 Functions 的呼叫次數 (非 Functions 總呼叫次數,因每部署一次,count 會歸零)

const functions = require('@google-cloud/functions-framework');

// Global variable, but only shared within function instance.
let count = 0;

/**
 * HTTP Cloud Function that counts how many times
 * it is executed within a specific instance.
 *
 * @param {Object} req Cloud Function request context.
 * @param {Object} res Cloud Function response context.
 */
functions.http('executionCount', (req, res) => {
  count++;

  // Note: the total function invocation count across
  // all instances may not be equal to this value!
  res.send(`Instance execution count: ${count}`);
});

例如:在 Cloud Functions 中再去發送 HTTP request,範例來源:Send HTTP requests

若使用的是 HTTP Cloud Functions,代表需要對進來的請求做處理,返回 res
可用 externalResres 做區隔

const fetch = require('node-fetch');
const functions = require('@google-cloud/functions-framework');

/**
 * HTTP Cloud Function that makes an HTTP request
 *
 * @param {Object} req Cloud Function request context.
 * @param {Object} res Cloud Function response context.
 */
functions.http('makeRequest', async (req, res) => {
  const url = 'https://example.com'; // URL to send the request to
  const externalRes = await fetch(url);
  res.sendStatus(externalRes.ok ? 200 : 500);
});

參考來源

Google推新一代無伺服器函式服務Cloud Functions,具60分鐘執行時間、更大的執行個體


上一篇
[前置作業] Google Cloud ? Cloud Functions ?
下一篇
[前置作業] Cloud Functions 實作 — 今日放映
系列文
職缺資訊平台—Jobscanner31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言